package net.comfycastle.musicplayer;

import java.util.HashMap;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;

/**
 * 메인 액티비티에서 탭 기능을 제공하기 위해 탭 버튼 기능을 담당하는 프래그먼트
 * @author ricale
 *
 */
public class MainTabFragment extends Fragment {
	///////////
	//////////
	/////////   enum
	
	/**
	 * 현재 활성화된 탭(버튼)을 정의
	 *
	 */
	public enum BUTTONID {
		/** 모든 곡을 보여주는 탭 활성화 */
		ALLSONG,
		/** 모든 앨범을 보여주는 탭 활성화 */
		ALLALBUM,
		/** 모든 아티스트를 보여주는 탭 활성화 */
		ALLARTIST,
		/** 모든 장르를 보여주는 탭 활성화 */
		ALLGENRE,
		/** 모든 작곡가를 보여주는 탭 활성화 */
		ALLCOMPOSER
	} // end BUTTONID
	
	///////////
	//////////
	/////////   variable
	
	/**
	 * 현재 활성화된 탭(버튼)
	 */
	private BUTTONID mNow;
	/**
	 * 탭에 존재하는 버튼들
	 * 기본적으로 모든 곡, 모든 앨범, 모든 아티스트가 존재하며 나머지는 설정에따라 생성된다.
	 */
	private HashMap<BUTTONID,Button> mButtons;
	
	///////////
	//////////
	/////////   lifecycle callback method
	
	/**
	 * 프래그먼트가 생성될 때의 콜백 메서드
	 */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mButtons = new HashMap<BUTTONID,Button>();
		mNow = BUTTONID.ALLSONG;
	} // end onCreate

	/**
	 * 프래그먼트가 액티비티에 붙을 때의 콜백 메서드
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		HorizontalScrollView view = (HorizontalScrollView)inflater.inflate(R.layout.maintab, container, false);
		mButtons.put(BUTTONID.ALLSONG, (Button)view.findViewById(R.id.maintab_btallsong));
		mButtons.put(BUTTONID.ALLALBUM, (Button)view.findViewById(R.id.maintab_btallalbum));
		mButtons.put(BUTTONID.ALLARTIST, (Button)view.findViewById(R.id.maintab_btallartist));
		mButtons.get(BUTTONID.ALLSONG).setOnClickListener(mOnClickListener);
		mButtons.get(BUTTONID.ALLALBUM).setOnClickListener(mOnClickListener);
		mButtons.get(BUTTONID.ALLARTIST).setOnClickListener(mOnClickListener);
		
		Activity     parent = getActivity();
		LinearLayout tabContainer = (LinearLayout)view.findViewById(R.id.maintab_container);
		LinearLayout tabbtn;
		Button       button;
		
		tabbtn = (LinearLayout)parent.getLayoutInflater().inflate(R.layout.tabbtn, null);
		tabContainer.addView(tabbtn);
		button = (Button)tabbtn.findViewById(R.id.tabbtn_btn);
		button.setText(R.string.tab_genre);
		button.setOnClickListener(mOnClickListener);
		mButtons.put(BUTTONID.ALLGENRE, button);
		
		tabbtn = (LinearLayout)parent.getLayoutInflater().inflate(R.layout.tabbtn, null);
		tabContainer.addView(tabbtn);
		button = (Button)tabbtn.findViewById(R.id.tabbtn_btn);
		button.setText(R.string.tab_composer);
		button.setOnClickListener(mOnClickListener);
		mButtons.put(BUTTONID.ALLCOMPOSER, button);
		
		return (View)view;
	} // end onCreateView
	
	///////////
	//////////
	/////////   event listener & callback method
	
	/**
	 * 탭 역할을 하는 버튼들이 눌렸을 때의 이벤트 리스너
	 */
	private final View.OnClickListener mOnClickListener = new View.OnClickListener() {
		/**
		 * 탭 역할을 하는 버튼들이 눌렸을 때의 콜백 메서드
		 */
		@Override
		public void onClick(View v) {
			Activity parent = getActivity();
			
			mButtons.get(mNow).setEnabled(true);
			mButtons.get(mNow).setTextColor(parent.getResources().getColor(R.color.maintab_tabbtn_font));
			
			switch(v.getId()) {
			case R.id.maintab_btallsong:
				mNow = BUTTONID.ALLSONG;
				break;
			case R.id.maintab_btallalbum:
				mNow = BUTTONID.ALLALBUM;
				break;
			case R.id.maintab_btallartist:
				mNow = BUTTONID.ALLARTIST;
				break;
			default:
				if(mButtons.containsKey(BUTTONID.ALLGENRE) && v.equals(mButtons.get(BUTTONID.ALLGENRE))) {
					mNow = BUTTONID.ALLGENRE;
				} else if (mButtons.containsKey(BUTTONID.ALLCOMPOSER) && v.equals(mButtons.get(BUTTONID.ALLCOMPOSER))) {
					mNow = BUTTONID.ALLCOMPOSER;
				} // end if
				break;
			} // end switch
			
			((OnButtonClickListener)parent).onButtonClick(mNow);
			mButtons.get(mNow).setEnabled(false);
			mButtons.get(mNow).setTextColor(parent.getResources().getColor(R.color.maintab_tabbtn_disable_font));
		} // end onClick
	}; // end mOnClickListener
	
	///////////
	//////////
	/////////   interface
	
	/**
	 * 탭(버튼)이 눌리는 이벤트를 받기 위한 이벤트 리스너 인터페이스
	 * 이 프래그먼트를 갖는 액티비티 (즉 메인 액티비티) 가 구현한다.
	 *
	 */
	public interface OnButtonClickListener {
		public void onButtonClick(BUTTONID buttonid);
	} // end ListFragmentItemClickListener
} // end MainTabFragment